import { defineStore } from 'pinia'
// import axios from 'axios' // 移除对原始 axios 的导入，因为我们只用实例
import axiosInstance from '../utils/axiosInstance'; // <-- 添加导入
import { jwtDecode } from 'jwt-decode'; // 导入 jwt-decode

// 移除旧的 User 接口

// (可选) 定义 UserDTO 接口，匹配后端返回或 Token 内容
interface UserInfo {
  id: number | null;
  username: string;
  role?: string; // 可能包含角色信息，例如 "ROLE_USER", "ROLE_ADMIN"
  email?: string; // 可能不包含在 token 中，需要额外获取
  avatar?: string; // 可以添加 avatar 信息
  balance?: number; // 用户余额
  phone?: string; // 用户手机号
  address?: string; // 用户地址
}

// 后端 API 基础 URL (应放入配置文件)
// const API_BASE_URL = 'http://localhost:8080/api';

export const useUserStore = defineStore('user', {
  state: () => ({
    token: localStorage.getItem('token') || '',
    user: JSON.parse(localStorage.getItem('user') || 'null') as UserInfo | null,
    loading: false,
  }),
  getters: {
    isLoggedIn: (state) => !!state.token && !!state.user,
    isAdmin: (state) => state.user?.role === 'ROLE_ADMIN',
    getUserId: (state) => state.user?.id,
    username: (state) => state.user?.username || ''
  },
  actions: {
    // 登录 (用户和管理员统一接口)
    async login(token: string, userInfo: UserInfo) {
      try {
        this.token = token;
        this.user = userInfo;
        localStorage.setItem('token', token);
        localStorage.setItem('user', JSON.stringify(userInfo)); // 持久化用户信息
        // 设置 axios 请求头携带 token (axiosInstance 拦截器已处理)
        // axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
        return { success: true };
      } catch (error: any) {
        console.error("Login error:", error);
        // 错误信息现在由响应拦截器处理，这里可以简化
        return {
          success: false,
          message: error.response?.data?.error || error.response?.data?.message || '登录失败'
        }
      }
    },

    // 注册
    async register(username: string, password: string, email: string) {
      try {
        // 修改：使用 axiosInstance 发送请求，以应用 baseURL
        const response = await axiosInstance.post(`/auth/register`, {
          username,
          password,
          email
        });
        // 注册成功通常不直接登录，需要用户手动登录
        // 但可以根据后端返回值判断是否成功
        return { success: true, data: response.data }; // 假设后端成功返回 UserDTO
      } catch (error: any) {
         console.error("Register error:", error);
        // 错误信息现在由响应拦截器处理
        return {
          success: false,
          message: error.response?.data?.error || error.response?.data?.message || '注册失败'
        }
      }
    },

    logout() {
      this.token = '';
      this.user = null;
      localStorage.removeItem('token');
      localStorage.removeItem('user');
      // 清除 axios 请求头 (axiosInstance 拦截器已处理)
      // delete axios.defaults.headers.common['Authorization'];
    },

    // 初始化 Store
    initialize() {
      const token = localStorage.getItem('token');
      const user = localStorage.getItem('user');
      if (token && user) {
        try {
            const parsedUser = JSON.parse(user) as UserInfo;
            this.login(token, parsedUser);
        } catch (e) {
            console.error("Failed to parse user from localStorage", e);
            this.logout(); // 解析失败则登出
        }
      } else {
        this.logout(); // 没有 token 或 user 信息则确保是登出状态
      }
    },

    // 获取用户信息
    async fetchUserInfo() {
      if (!this.token) {
        return { success: false, message: '用户未登录' };
      }

      try {
        const response = await axiosInstance.get('/users/profile');
        if (response.data) {
          // 更新用户信息
          if (this.user) {
            this.user = { ...this.user, ...response.data };
            // 保存到localStorage
            localStorage.setItem('user', JSON.stringify(this.user));
          }
          return { success: true, data: response.data };
        }
        return { success: false, message: '获取用户信息失败' };
      } catch (error: any) {
        console.error("Fetch user info error:", error);
        return {
          success: false,
          message: error.response?.data?.error || error.response?.data?.message || '获取用户信息失败'
        };
      }
    }
  }
})